今天我們要來講建立物件的方式,廢話不多說,就讓我們直接進入主題吧!
通常我們在 JavaScript 要建立一個物件並且增加屬性與方法的話,會像以下程式碼
var obj = new Object();
obj.name = "Reynold";
obj.gender = "male";
obj.showName = function() {
console.log( "my name : " + this.name );
};
obj.showGender = function() {
console.log( "my gender : " + this.gender );
};
obj.showName(); // my name : Reynold
obj.showGender(); // my gender : male
但如果今天我們要大量地產生物件呢?可能有些同學會想到, copy and paste 就好啦,是沒錯, 畢竟一時剪貼一時爽,一直剪貼一直爽,別鬧了孩子,後面維護起來你會恨自己的,所以,我們可以利用函式來產生。
function createPerson(name, gender) { // 建構物件的函式( 工廠方式 )
// 原料
var obj = new Object();
// 加工
obj.name = name;
obj.gender = gender;
obj.showName = function() {
console.log( "my name : " + this.name );
}
obj.showGender = function() {
console.log( "my gender : " + this.gender );
}
// 出廠
return obj
}
var p1 = createPerson("Reynold", "male");
p1.showName(); // my name : Reynold
p1.showGender(); // my gender : male
var p2 = createPerson("bonnie", "female");
p2.showName(); // my name : bonnie
p2.showGender(); // my gender : female
這樣我們就能快速地產生大量的物件,但就真的沒問題了嗎?
不,事情沒有我們想像的這麼簡單,孩子
這樣做會有兩大問題點
系統內建的物件習慣上都會使用 new 來產生物件
var date = new Date(); var ary = new Array();
console.log(p1.showName === p2.showName); //false
從上方的程式碼我們可以得知,兩個的方法並不相同,這代表什麼?
代表說每次建立一個新的物件,就產生了一個新的方法,這容易造成記憶體資源上的浪費!
那我們到底該怎麼解決這些問題勒?預知後續如何,請待下回分曉
剛剛得知放颱風假,這讓連續兩天假日加班的我,差點哭出來 QQ
參考資料:
Tommy - 深入 JavaScript 核心課程
MDN - 初學者應知道的物件導向 JavaScript